package core

import (
	"fmt"
	"gin_framework/global"
	"gin_framework/models"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
	"time"
)

func InitGorm() *gorm.DB {
	// 判断 配置文件中host 是否为空
	if global.Config.Mysql.Host == "" {
		global.Log.Warning("未配置mysql,取消gorm连接")
		return nil
	}
	// 获取 mysql 相关信息
	dsn := global.Config.Mysql.Dsn()
	fmt.Println("dsn= ", dsn)
	// 配置 logger ,如果是 开发环境 全部打印
	// 如果是 运行环境,只打印错误
	var mysqlLogger logger.Interface
	if global.Config.System.Env == "debug" {
		mysqlLogger = logger.Default.LogMode(logger.Info)
	} else {
		mysqlLogger = logger.Default.LogMode(logger.Error)
	}
	// 连接数据库
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
		Logger: mysqlLogger,
	})
	// 连接错误
	if err != nil {
		global.Log.Warning(fmt.Sprintf("[%s] mysql 连接失败", dsn))
	}
	// 配置相关信息
	sqlDB, _ := db.DB()
	sqlDB.SetMaxIdleConns(10)  // 最大空闲连接
	sqlDB.SetMaxIdleConns(100) // 最多可容纳
	sqlDB.SetConnMaxLifetime(time.Hour * 4)
	return db
}

func MakeMigrations() {
	var err error
	err = global.DB.Set("gora:table_options", "ENGINE=InnoDB").AutoMigrate(
		&models.UserModel{},
	)
	if err != nil {
		global.Log.Error(err)
	} else {
		global.Log.Info("数据迁移完成")
	}
}
